//
//  NetWorkSecurity.h
//  URLSessionTest
//
//  Created by mac on 2017/7/7.
//  Copyright © 2017年 yyb. All rights reserved.
//

#import <Foundation/Foundation.h>
typedef NS_ENUM(NSUInteger, TWAFSSLPinningMode) {
    TWAFSSLPinningModeNone,
    TWAFSSLPinningModePublicKey,
    TWAFSSLPinningModeCertificate,
};

//typedef void (^SSLVaidateErrorCallBack) ();

@interface NetWorkSecurity : NSObject

//@property(nonatomic, strong) SSLVaidateErrorCallBack sSLVaidateErrorCallBack;
/**
 服务器信任的标准应根据固定的SSL证书进行评估。 默认为“TWAFSSLPinningModeNone”。
 */
@property (readwrite, nonatomic, assign) TWAFSSLPinningMode SSLPinningMode;
/**
 是否信任具有无效或过期的SSL证书的服务器。 默认为“否”。
 */
@property (nonatomic, assign) BOOL allowInvalidCertificates;
/**
 是否验证证书的CN域中的域名。 默认为“YES”。
 */
@property (nonatomic, assign) BOOL validatesDomainName;
/**
 该证书用于根据SSL钉扎模式来评估服务器的信任。
 默认情况下，此属性设置为目标编译TWAFNetworking中包含的任何（.cer）证书。 请注意，如果您使用TWAFNetworking作为嵌入式框架，则默认情况下不会固定证书。 使用`certificatesInBundle`从目标装载证书，然后通过调用`policyWithPinningMode：withPinnedCertificates'创建一个新的策略。
 请注意，如果启用了固定，则“evaluateServerTrust：forDomain：”将在任何固定证书匹配时返回true
 */
@property (nonatomic, strong) NSSet <NSData *> *pinnedCertificates;
@property (readwrite, nonatomic, strong) NSSet *pinnedPublicKeys;

- (void)addSSLPinning:(NSData *)LocalCertData andAllowInvalidCertificates:(BOOL)allowInvalidCertificates andValidatesDomainName:(BOOL)validatesDomainName andSSLPinningMode:(TWAFSSLPinningMode )SSLPinningMode;
- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust
                  forDomain:(NSString *)domain;
@end
